// 实现策略模式
// 动态选择算法：根据不同的场景选择不同的策略

// 策略接口
interface Strategy {
  execute(data: number[]): number;
}

// 具体策略类：求和策略
class SumStrategy implements Strategy {
  execute(data: number[]): number {
    return data.reduce((acc, cur) => acc + cur, 0);
  }
}

// 上下文类
class Context {
  constructor(private strategy: Strategy) {}

  // 上下文方法：根据当前策略执行计算
  execute(data: number[]): number {
    return this.strategy.execute(data);
  }
}

const context = new Context(new SumStrategy());
context.execute([1, 2, 3, 4, 5]); // 15